Import a stripped down version of gcc-4.1.1
[dragonfly.git] / contrib / gcc-4.1 / libstdc++-v3 / include / tr1 / type_traits_fwd.h
1 // TR1 type_traits -*- C++ -*-
2
3 // Copyright (C) 2004 Free Software Foundation, Inc.
4 //
5 // This file is part of the GNU ISO C++ Library.  This library is free
6 // software; you can redistribute it and/or modify it under the
7 // terms of the GNU General Public License as published by the
8 // Free Software Foundation; either version 2, or (at your option)
9 // any later version.
10
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 // GNU General Public License for more details.
15
16 // You should have received a copy of the GNU General Public License along
17 // with this library; see the file COPYING.  If not, write to the Free
18 // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19 // USA.
20
21 // As a special exception, you may use this file as part of a free software
22 // library without restriction.  Specifically, if other files instantiate
23 // templates or use macros or inline functions from this file, or you compile
24 // this file and link it with other files to produce an executable, this
25 // file does not by itself cause the resulting executable to be covered by
26 // the GNU General Public License.  This exception does not however
27 // invalidate any other reasons why the executable file might be covered by
28 // the GNU General Public License.
29
30 /** @file type_traits_fwd.h
31  *  This is an internal header file, included by other library headers.
32  *  You should not attempt to use it directly.
33  */
34
35 #ifndef _TYPE_TRAITS_FWD_H
36 #define _TYPE_TRAITS_FWD_H 1
37
38 #include <cstddef>
39
40 // namespace std::tr1
41 namespace std
42 {
43 namespace tr1
44 {
45   /// @brief  helper classes [4.3].
46   template<typename _Tp, _Tp __v>
47     struct integral_constant;
48   typedef integral_constant<bool, true>     true_type;
49   typedef integral_constant<bool, false>    false_type;
50
51   /// @brief  primary type categories [4.5.1].
52   template<typename _Tp>
53     struct is_void;
54
55   template<typename _Tp>
56     struct is_integral;
57
58   template<typename _Tp>
59     struct is_floating_point;
60
61   template<typename _Tp>
62     struct is_array;
63   
64   template<typename _Tp>
65     struct is_pointer;
66  
67   template<typename _Tp>
68     struct is_reference;
69
70   template<typename _Tp>
71     struct is_member_object_pointer;
72   
73   template<typename _Tp>
74     struct is_member_function_pointer;   
75
76   template<typename _Tp>
77     struct is_enum;
78   
79   template<typename _Tp>
80     struct is_union;
81   
82   template<typename _Tp>
83     struct is_class;
84
85   template<typename _Tp>
86     struct is_function;
87
88   /// @brief  composite type traits [4.5.2].
89   template<typename _Tp>
90     struct is_arithmetic;
91
92   template<typename _Tp>
93     struct is_fundamental;
94
95   template<typename _Tp>
96     struct is_object;
97
98   template<typename _Tp>
99     struct is_scalar;
100
101   template<typename _Tp>
102     struct is_compound;
103
104   template<typename _Tp>
105     struct is_member_pointer;
106
107   // Extension.
108   template<typename _Tp>
109     struct __is_union_or_class;
110    
111   /// @brief  type properties [4.5.3].
112   template<typename _Tp>
113     struct is_const;
114   
115   template<typename _Tp>
116     struct is_volatile;
117
118   template<typename _Tp>
119     struct is_pod;
120   
121   template<typename _Tp>
122     struct is_empty;
123   
124   template<typename _Tp>
125     struct is_polymorphic;
126   
127   template<typename _Tp>
128     struct is_abstract;
129   
130   template<typename _Tp>
131     struct has_trivial_constructor;
132   
133   template<typename _Tp>
134     struct has_trivial_copy;
135
136   template<typename _Tp>
137     struct has_trivial_assign;
138   
139   template<typename _Tp>
140     struct has_trivial_destructor;
141   
142   template<typename _Tp>
143     struct has_nothrow_constructor;
144   
145   template<typename _Tp>
146     struct has_nothrow_copy;
147
148   template<typename _Tp>
149     struct has_nothrow_assign;
150   
151   template<typename _Tp>
152     struct has_virtual_destructor;
153   
154   template<typename _Tp>
155     struct is_signed;
156   
157   template<typename _Tp>
158     struct is_unsigned;
159    
160   template<typename _Tp>
161     struct alignment_of;
162   
163   template<typename _Tp>
164     struct rank;
165   
166   template<typename _Tp, unsigned _Uint = 0>
167     struct extent;
168   
169   /// @brief  relationships between types [4.6].
170   template<typename _Tp, typename _Up>
171     struct is_same;
172
173   template<typename _From, typename _To>
174     struct is_convertible;
175
176   template<typename _Base, typename _Derived>
177     struct is_base_of;
178
179   /// @brief  const-volatile modifications [4.7.1].
180   template<typename _Tp>
181     struct remove_const;
182   
183   template<typename _Tp>
184     struct remove_volatile;
185   
186   template<typename _Tp>
187     struct remove_cv;
188   
189   template<typename _Tp>
190     struct add_const;
191    
192   template<typename _Tp>
193     struct add_volatile;
194   
195   template<typename _Tp>
196     struct add_cv;
197
198   /// @brief  reference modifications [4.7.2].
199   template<typename _Tp>
200     struct remove_reference;
201   
202   template<typename _Tp>
203     struct add_reference;
204
205   /// @brief  array modififications [4.7.3].
206   template<typename _Tp>
207     struct remove_extent;
208
209   template<typename _Tp>
210     struct remove_all_extents;
211
212   /// @brief  pointer modifications [4.7.4].
213   template<typename _Tp>
214     struct remove_pointer;
215   
216   template<typename _Tp>
217     struct add_pointer;
218
219   /// @brief  other transformations [4.8].
220   template<std::size_t _Len, std::size_t _Align>
221     struct aligned_storage;
222 }
223 }
224
225 #endif